package cc.rengu.igas.route.core.realize.payment.impl.upac;

import cc.rengu.igas.route.core.realize.payment.CheckVerificaElement;
import cc.rengu.igas.route.facade.bean.PayerInfo;
import cc.rengu.oltp.service.common.enums.AcctTypeEnum;
import cc.rengu.oltp.utility.util.StringUtil;

/**
 * 银联全渠道验证要素是否齐全
 *
 * @author xionglz
 * @version 1.0
 * @date 2020-03-31
 */
public class UpacCheckVerificaElement implements CheckVerificaElement {
    @Override
    public boolean signElementchecked(PayerInfo payerInfo) throws Exception {
        if (StringUtil.isEmptyOrNull(payerInfo.getAcctType())) {
            return false;
        }
        //借记卡，卡号、姓名、证件类型，证件号码，预留手机号为空则认为要素不齐全
        if (AcctTypeEnum.OTHER_DEBIT.getAcctType().equals(payerInfo.getAcctType())) {
            if (StringUtil.isEmptyOrNull(payerInfo.getAcctNo()) ||
                    StringUtil.isEmptyOrNull(payerInfo.getAcctName()) ||
                    StringUtil.isEmptyOrNull(payerInfo.getCertType()) ||
                    StringUtil.isEmptyOrNull(payerInfo.getCertId()) ||
                    StringUtil.isEmptyOrNull(payerInfo.getPhoneNo())) {
                return false;
            }
        }
        //贷记卡，卡号、卡有效期，CVN为空则认为要素不齐全
        if (AcctTypeEnum.OTHER_CREDIT.getAcctType().equals(payerInfo.getAcctType())) {
            return !StringUtil.isEmptyOrNull(payerInfo.getAcctNo()) &&
                    !StringUtil.isEmptyOrNull(payerInfo.getCardCvn2()) &&
                    !StringUtil.isEmptyOrNull(payerInfo.getCardExpr());
        }
        return true;
    }

    @Override
    public boolean paymentDirectElementchecked(PayerInfo payerInfo) throws Exception {
        if (StringUtil.isEmptyOrNull(payerInfo.getAcctType())) {
            return false;
        }
        //借记卡，卡号、姓名、证件类型，证件号码，预留手机号为空则认为要素不齐全
        if (AcctTypeEnum.OTHER_DEBIT.getAcctType().equals(payerInfo.getAcctType())) {
            if (StringUtil.isEmptyOrNull(payerInfo.getAcctNo()) ||
                    StringUtil.isEmptyOrNull(payerInfo.getAcctName()) ||
                    StringUtil.isEmptyOrNull(payerInfo.getCertType()) ||
                    StringUtil.isEmptyOrNull(payerInfo.getCertId()) ||
                    StringUtil.isEmptyOrNull(payerInfo.getPhoneNo())) {
                return false;
            }
        }
        //贷记卡，卡号、卡有效期，CVN为空则认为要素不齐全
        if (AcctTypeEnum.OTHER_CREDIT.getAcctType().equals(payerInfo.getAcctType())) {
            return !StringUtil.isEmptyOrNull(payerInfo.getAcctNo()) &&
                    !StringUtil.isEmptyOrNull(payerInfo.getCardCvn2()) &&
                    !StringUtil.isEmptyOrNull(payerInfo.getCardExpr());
        }
        return true;
    }

    @Override
    public boolean paymentBySignFirstElementchecked(PayerInfo payerInfo) throws Exception {
        //全渠道代收签约后只需要上送卡号
        if (StringUtil.isEmptyOrNull(payerInfo.getAcctType())) {
            return false;
        }
        //借记卡，卡号、姓名、证件类型，证件号码，预留手机号为空则认为要素不齐全
        if (AcctTypeEnum.OTHER_DEBIT.getAcctType().equals(payerInfo.getAcctType())) {
            if (StringUtil.isEmptyOrNull(payerInfo.getAcctNo())) {
                return false;
            }
        }
        //贷记卡，卡号、卡有效期，CVN为空则认为要素不齐全
        if (AcctTypeEnum.OTHER_CREDIT.getAcctType().equals(payerInfo.getAcctType())) {
            return !StringUtil.isEmptyOrNull(payerInfo.getAcctNo());
        }
        return false;
    }
}
